<template>
	<view class="pdaScan"></view>
</template>

<script lang="ts" setup>
	import { onMounted, onUnmounted, ref } from 'vue'

	// 定义类型
	interface SetContent {
		action : string
		extra : string
	}

	// 接收 props
	const props = defineProps<{
		setContent ?: SetContent
		listenName ?: string
	}>()

	// 使用默认值
	const setContent = ref(props.setContent ?? { action: '', extra: '' })
	const listenName = ref(props.listenName ?? 'scancodedate')

	// Android 相关变量
	let activity : any = null
	let receiver : any = null
	let intentFilter : any = null

	function initScan() {
		try {
			// 获取主Activity
			activity = plus.android.runtimeMainActivity();

			// 导入必要的Android类
			const IntentFilter = plus.android.importClass('android.content.IntentFilter');

			// 创建IntentFilter实例
			intentFilter = new IntentFilter();

			// 设置广播动作
			intentFilter.addAction(setContent.value.action);

			// 创建广播接收器（修复了实现方式）
			receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
				onReceive: (context : any, intent : any) => {
					try {
						// 正确获取扫码结果
						plus.android.importClass(intent);
						const content = intent.getStringExtra(setContent.value.extra);

						// 确保内容有效才发送
						if (content) {
							uni.$emit(listenName.value, content)
						}
					} catch (e) {
						console.error('处理扫码结果时出错:', e);
					}
				}
			});

			console.log('PDA扫描初始化完成，监听动作:', setContent.value.action);
		} catch (e) {
			console.error('PDA扫描初始化失败:', e);
		}
	}

	function startScan() {
		if (activity && receiver && intentFilter) {
			try {
				// 注册广播接收器
				activity.registerReceiver(receiver, intentFilter);
				console.log('PDA扫描已启动');
			} catch (e) {
				console.error('注册广播接收器失败:', e);
			}
		}
	}

	function stopScan() {
		try {
			if (activity && receiver) {
				// 注销广播接收器
				activity.unregisterReceiver(receiver);
				console.log('PDA扫描已停止');
			}
		} catch (e) {
			console.warn('停止扫描时出错:', e);
		}
	}

	// 生命周期
	onMounted(() => {
		console.log('组件挂载，初始化扫描');
		initScan()
		startScan()
	})

	onUnmounted(() => {
		console.log('组件卸载，停止扫描');
		stopScan()
	})
</script>

<style lang="scss" scoped>
	.pdaScan {
		/* 空容器，不需要样式 */
	}
</style>